﻿using BackgroundAgant;
using cnBlogs.Common;
using cnBlogs.Common.Helper;
using cnBlogs.Views;
using Windows.ApplicationModel;
using Windows.ApplicationModel.Activation;
using Windows.ApplicationModel.Background;
using Windows.UI.Xaml;

// The Grid App template is documented at http://go.microsoft.com/fwlink/?LinkId=234226

namespace cnBlogs
{
    /// <summary>
    /// Provides application-specific behavior to supplement the default Application class.
    /// </summary>
    sealed partial class App : Application
    {
        /// <summary>
        /// Initializes the singleton Application object.  This is the first line of authored code
        /// executed, and as such is the logical equivalent of main() or WinMain().
        /// </summary>
        public App()
        {
            initializeDatabase();
            this.InitializeComponent();
            this.Suspending += OnSuspending;
            this.UnhandledException += App_UnhandledException;
            //backgound
#if !DEBUG
            TileHelper.EnableNotificationQueue = true;
            var backgroundbuild = BackgroundHelper.RegisteBackgroundTask(new MaintenanceTrigger(15, false), new SystemCondition(SystemConditionType.UserPresent));
            backgroundbuild.Completed += BackgroundHelper.OnCompleted;
#endif

        }

        void App_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            e.Handled = true;
        }

        public static cnBlog_sDataBaseHelper DB = new cnBlog_sDataBaseHelper();
        private async void initializeDatabase()
        {
            await DB.InitialBatabaseAsync();
        }
        /// <summary>
        /// Invoked when the application is launched normally by the end user.  Other entry points
        /// will be used when the application is launched to open a specific file, to display
        /// search results, and so forth.
        /// </summary>
        /// <param name="args">Details about the launch request and process.</param>
        protected override void OnLaunched(LaunchActivatedEventArgs args)
        {
            // Do not repeat app initialization when already running, just ensure that
            // the window is active
            new LastAccessHelper();
            if (args.PreviousExecutionState == ApplicationExecutionState.Running)
            {
                Window.Current.Activate();
                return;
            }

            bool loadState = (args.PreviousExecutionState == ApplicationExecutionState.Terminated);
            SplashScreenView extendedSplash = new SplashScreenView(args.SplashScreen, loadState);
            Window.Current.Content = extendedSplash;

            Window.Current.Activate();
        }


        /// <summary>
        /// Invoked when application execution is being suspended.  Application state is saved
        /// without knowing whether the application will be terminated or resumed with the contents
        /// of memory still intact.
        /// </summary>
        /// <param name="sender">The source of the suspend request.</param>
        /// <param name="e">Details about the suspend request.</param>
        private async void OnSuspending(object sender, SuspendingEventArgs e)
        {
            var deferral = e.SuspendingOperation.GetDeferral();
            //await SuspensionManager.SaveAsync();
            deferral.Complete();
        }

    }
}
